export interface IExtensibleObject<T extends IExtensibleObject<T>> {
    extensions: IExtension<T>[];
}

export interface IExtension<T extends IExtensibleObject<T>> {
    attach(owner: T): void;
    detach(owner: T): void;
}


